package com.lckj.android.shell.base;

import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import com.lckj.android.shell.R;
import com.lckj.android.shell.utils.StatusBarUtil;

/**
 * @author lc. 2023-10-22 15:17
 */
public abstract class BaseActivity extends AppCompatActivity {

    private Toolbar mToolbar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStatusBarColor(statusBarColor());
    }

    /**
     * 设置 Toolbar 返回样式。修改导航背景色可以通过
     * 主题设置{@link androidx.appcompat.R.attr#colorPrimary}或子类重载{@link #toolbarBackgroundColor()}实现
     *
     * @param title         标题
     * @param clickListener 返回点击监听
     */
    protected void setToolbarAsBack(String title, View.OnClickListener clickListener) {
        setupToolbar(title, IconType.BACK, clickListener);
    }


    /**
     * 设置 toolbar 样式
     *
     * @param title         标题
     * @param iconType      返回图标的样式
     * @param clickListener 返回点击监听
     */
    private void setupToolbar(String title, IconType iconType, View.OnClickListener clickListener) {
        getToolbar();
        if (mToolbar == null) {
            return;
        }
        // 设置标题
        ActionBar supportActionBar = getSupportActionBar();
        if (supportActionBar == null) {
            return;
        }
        supportActionBar.setTitle(title);

        // 读取 toolbar 背景颜色
        int toolbarBgColor = toolbarBackgroundColor();
        mToolbar.setBackgroundColor(toolbarBgColor);
        // toolbar 背景是亮色，使用灰色返回图片
        boolean lightToolbarBg = isLightColor(toolbarBgColor);
        if (lightToolbarBg) {
            mToolbar.setTitleTextColor(getResources().getColor(R.color.text_color_primary));
            if (iconType == IconType.BACK) {
                mToolbar.setNavigationIcon(R.drawable.icon_toolbar_back_dark);
            }
            if (iconType == IconType.CLOSE) {
                mToolbar.setNavigationIcon(R.drawable.icon_toolbar_close_dark);
            }
        }
        // toolbar 背景是暗色，使用白色返回图片
        else {
            mToolbar.setTitleTextColor(getResources().getColor(R.color.white));
            if (iconType == IconType.BACK) {
                mToolbar.setNavigationIcon(R.drawable.icon_toolbar_back_white);
            }
            if (iconType == IconType.CLOSE) {
                mToolbar.setNavigationIcon(R.drawable.icon_toolbar_close_white);
            }
        }
        mToolbar.setNavigationOnClickListener(clickListener);
    }

    protected void setToolbarText(CharSequence text) {
        ActionBar supportActionBar = getSupportActionBar();
        if (supportActionBar == null) {
            return;
        }
        supportActionBar.setTitle(text);
    }

    @Nullable
    public Toolbar getToolbar() {
        if (mToolbar == null) {
            mToolbar = findViewById(R.id.toolbar);
            if (mToolbar != null) {
                setSupportActionBar(mToolbar);
            }
        }
        return mToolbar;
    }


    private enum IconType {
        // toolbar icon 类型：返回
        BACK,
        // toolbar icon 类型：关闭
        CLOSE
    }


    /**
     * 设置状态栏背景颜色，会自动根据背景颜色调整状态栏文字颜色
     *
     * @param color 颜色
     */
    protected void setStatusBarColor(@ColorInt int color) {
        setStatusBarColor(color, true);
    }

    /**
     * 设置状态栏背景颜色，会自动根据背景颜色调整状态栏文字颜色
     *
     * @param color               颜色
     * @param autoChangeTextColor 是否自动修改状态栏文字颜色
     */
    protected void setStatusBarColor(@ColorInt int color, boolean autoChangeTextColor) {

        StatusBarUtil.setStatusBarColor(getWindow(), color);
        if (!autoChangeTextColor) {
            return;
        }

        // 自动根据状态栏颜色的深浅来设置状态栏颜色
        // 状态栏颜色较浅，使用黑色的状态栏文字
        boolean lightColor = isLightColor(color);
        if (lightColor) {
            StatusBarUtil.setStatusBarLightMode(getWindow(), color);
        } else {
            StatusBarUtil.setStatusBarDarkMode(getWindow(), color);
        }
    }

    /**
     * 判断颜色是否为亮色
     *
     * @param color 颜色
     * @return 亮色，返回 true，反之返回 false
     */
    protected boolean isLightColor(int color) {
        if (color == Color.TRANSPARENT) {
            return true;
        }
        float a = color >>> 24;
        float r = (color & 0xff0000) >> 16;
        float g = (color & 0xff00) >> 8;
        float b = color & 0xff;
        return r * 0.299 + g * 0.578 + b * 0.114 >= 192;
    }

    /**
     * 状态栏颜色
     *
     * @return 状态栏颜色资源 ID {@link ColorRes}
     */
    @ColorInt
    protected int statusBarColor() {
        TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{androidx.appcompat.R.attr.colorPrimaryDark});
        int toolbarBgColorResId = typedArray.getColor(0, Color.WHITE);
        typedArray.recycle();
        return toolbarBgColorResId;
    }

    /**
     * Toolbar 导航栏背景颜色
     *
     * @return 导航栏背景颜色值。默认从主题中读取 {@link androidx.appcompat.R.attr#colorPrimary}
     */
    protected int toolbarBackgroundColor() {
        TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{androidx.appcompat.R.attr.colorPrimary});
        int toolbarBgColor = typedArray.getColor(0, Color.WHITE);
        typedArray.recycle();
        return toolbarBgColor;
    }

}
